Chat Documentation

This is the original documentation for chat 2.06.  It's not very easy to read, so I would suggest skimming over it and then looking at it later if you need to.

--Erich
____________________________________________________

This is a the documentation for Chat - an TCP/IP Chat Server for the Mac.
It was originally written by Peter N. Lewis. Extensive modifications by me
have turned it into version 2.

If anyone would like to write some better documentation for Chat 2.0 -
please do so and send it to me - I just do not have the time to do it.

Email any comments/suggestions/complaints/etc. to:  nneul@umr.edu

This software is shareware - if you want to distribute it on any commercial
medium (information services, CD, etc.) contact me first - I would 
appreciate a sample copy of the CD for example.

The latest version of Chat and it source are available on my ftp site:
pluto.cc.umr.edu   in    /pub/chat-20x

I would appreciate a note from anyone who has done anything interesting 
with the source - and before anyone redistributes any derivative works. 
Also, please let me know if you are using the Chat room for something - 
I'd like to know it's worth it.

Enjoy...

-- Nathan Neulinger (nneul@umr.edu)

**** WHATS NEW IN 2.0.6 ****

The user password bug has been fixed. 

A new option has been added to allow the chat room application to beep 
whenever someone connects.

Adminstrative variables have been added to allow administrative setting 
of beep on login, prompt for channel at login, and subject. They are 
BEEP, PROMPT, and SUBJECT, respectively.

A new menu option, though currently not implemented, has been added which 
will allow the administrator to control whether users can change the 
subject of the channel. 

The help text has been updated to reflect the change in the /CHANNEL 
command, which (as of v.2.0.5) lists the channels and subjects if no channel 
is specified.

**** WHATS NEW IN 2.0.5 ****

The bug that caused the username to not be displayed in the "User has 
left chat room" message has been fixed.

The icon mask has been fixed, it used to not be easy to click, only a 
small area of it was sensitive.

A new user variable is available "SUBJECT", allows the user to set the 
subject of a channel.

The "/CHANNEL" command will now display a list of channels, and the 
subjects for those channels, when a channel name is not entered. It also 
puts a * in front of the channel you are currently on.

There is a new STR# resource that holds the default subjects for the 
channels in the chat room.

A new preferences option and menu item is available - Prompt For Channel 
At Login. If this is turned off (the default now), the user will be 
automatically placed in the first channel. 

The login screens will now allow up to three chances to type in the 
correct/valid response. You now will not be immediately logged out if you 
make a typo in the channel name.

**** WHATS NEW IN 2.0.4 ****

Several bugs have been fixed including the infamous port 1420 problem. 
Also, a beep has been added that is sounded when you receive a page.

The About box has been changed. 

Chat is now distributed by default with log files for all channels turned 
off, this can be easily changed by filling in file names.

The default port is now set to 23, so you can simply telnet to the 
machine chat is running on, without specifying a port number.

The problem with Chat not quitting when you shut down or restart has been 
fixed. For you programmer types out there - let this be a lesson to you: 
"Never name the Quit item in your file menu anything other than 'Quit' - it 
was 'Quit Chat Room'".

**** WHATS NEW IN 2.0.3 ****

You can now switch between Foreground Only and Background Only versions 
of the Chat Room by simply changing the Background only bit in the size
resource. Thanks to Peter Lewis for providing the code to make this 
possible. To cut down on size, the Chat room will be distributed in the 
foreground only mode.

The utilities menu has been enabled. Features available in utilities menu:
    Disabling User Passwords
    Disabling Logins
    Disabling Whispers
    Disabling Yells
    
Default settings for these options are read in from the 'CPrf' resource 
in the application. A 'TMPL' for editing this resource is also present. 
The default port has been moved from a STR resource to the preferences 
resource. The setting of disabling user passwords is restricted if their 
are no passwords present in the file.

A new administrator command has been added - \SET to allow setting of 
those disabled options from within the chat room. For example - with the 
default admin password of "admin". The command "\SET admin logins off" 
will disable any new logins. Typing "\SET admin" will list the options.

A new die rolling routine has been added - allows easy selection of 
different die configurations in the standard roll playing notation such as
2d20 to roll 2 twenty sided dice. 

**** WHATS NEW IN 2.0.2 ****

By popular demand -  I have reverted to Chat being a BackGround only 
application. However, instead of it only being background only, you have
the choice. Two applications are distributed with the archive. The (BG) one
is Background Only. The (FG) is Foreground Only. 

The only difference between the two is the "Only Background" bit in the 
SIZE resource, and the 0 or 1 value in Str #3 in the Globals string
resource. I know it is a cheap way to program it, but I don't have all 
that much time to work on it. If anyone would like to write me a small 
little piece of Pascal code that would check to see what the Background
Only bit is, please do.

Plans for 2.0.3 - someone sent me some new code for the die rolling 
routines. Will put that in as soon as I have a chance to rewrite it to 
match the style of the rest of the program. Thanks to Erich at UIUC
for the new code. 

Other Concerns: Chat logs can be placed in a specific location by 
typing the full path in the ChannelLogNames string resource. 
Eg. "HD 80:Chat Logs:Channel 1 Log" for example. Without the quotes! :)

There is still a problem with Chat crashing after running for an extended 
time. So far - this appears to only affect Chat - it doesn't seem to bother
any other programs that are running.

Chat has been successfully tested and run under A/UX 3.0.1. 

**** WHATS NEW IN 2.0.1 ****

Added the capability for leaving the user passwords string resource
empty. Now, if there is nothing in the user passwords string resource
the chat room will not ask for a user password on login.

Also fixed a small bug - well, didn't actually fix it, just turned off
Pascal Range Checking in the compile. Problem caused Chat to crash on
any machine not running MacsBug. 

**** WHATS NEW IN 2.0 ****

This is a new and improved version of Peter N. Lewis's Chat 1.1 
Macintosh TCP/IP Chat Server. It now supports changing of channels,
changing of user names, and many other nifty features. To customize
it you will need to use ResEdit - most of the program's strings are 
contained
in resources so it can be customized rather extensively.

New Commands:
 User Help                               /HELP
 Changing channel                        /CHANNEL ch-name
 Whispering to another user              /WHISPER user
 Yelling to all channels                 /YELL msg
 Change your name                        /SET NAME newname
 Page a user to your channel             /PAGE user
 List users on all channels              /LISTALL
 List users on current channel only      /LIST
 Rolling dice (for games I suppose)      /DICE count
 
 Hiding from other users (Admin Only)    \HIDE admin-pswd
 Unhideing from other users (Admin Only) \UNHIDE admin-pswd
 Disconnect A User (Admin Only)          \KILL admin-pswd user
 Disconnect All (Admin Only)             \RESTART admin-pswd
 Administrator Help                      \HELP
 User and Administrator Passwords

The default TCP port to connect to: 1420
The default user password for Chat 2.0 is "permission".
The default admin password for Chat 2.0 is "admin".

A sample telnet session to the chat server is enclosed.

*************************************************************************
The following is the documentation enclosed w/ Chat 1.1.0. 
*************************************************************************

Chat 1.1.0 © Peter N Lewis, Mar 1992.
This program is free, but I retain the copyright on it.

This program was initially written to assist in the online meetings of the 
TopSoft group, a group of mac programmers on the Internet, dedicated to 
producing free, high quality software and sample code.  To get more 
information about this group, ftp to syrinx.kgs.ukans.edu and check out 
the /topsoft directory, or send some mail to 
ts-request@syrinx.kgs.ukans.edu and ask to be added to the mailing list.

• Contents

      What Chat Does
      Using Chat
      Customising Chat
      How It Works
      Limitations
      Small Print
      Warranty
      Fine Print
      Version History
      The Author

• What Chat Does

Chat is a background only application that lets Macs with MacTCP 1.1 serve 
as a very primitive IRC.  Once Chat is running on your mac, multiple 
people can Telnet to port 1420 on your mac and have online discussions .  
Chat has no macintosh user interface, the only way to use it is by 
telneting to your mac.  I wrote this to hold the weekly online meetings of 
the TopSoft group, which have proved very successful.   Chat can support 
upwards of 12 users with the current memory partition (200k), and can 
support an arbitrarily large number of users given enough memory (though 
MacTCP will probably blow up if you try too many :-).  Add about 5 or 10k 
for each extra users you want.

• Using Chat

You must have MacTCP 1.1 installed in order to use Chat.

Put Chat or an alias to it in the Startup Folder (System 7) or make it a 
startup application (System 6 - note you will have to use "Selected 
Applications and DAs" since background only applications are not counted 
as Open Applications under System 6).  Double-Click Chat to get it started 
now.

Now you need to connect to Chat using NCSA/Telnet, MUDDweller, telnet on 
unix or VMS machines or some other method...

NCSA/Telnet:
Choose Open Connection from the File Menu, type in the name (or IP number) 
of your mac, a space and then the port number (1420).

MUDDweller:
Choose New, then choose TCP/IP Address from the configure menu and type in 
the ip numbers of your mac (or the name for newer versions of MUDDweller), 
and the port number (1420).  Hit OK, and then choose Open Connection from 
the Configure menu.

Unix:
telnet <macname or ip number> 1420

VMS:
telnet <macname or ip number> /port=1420

When you connect, it will ask you for a channel.  Channels are defined in 
a STR# resource inside chat (no, I'm not going to make a fancy UI for 
editing it).  By default, there are two channels, “normal” and “nolog”.  
The normal channel is logged to Normal Log on your system volume.  The 
nolog channel is not logged (obviously :-).  After that it will ask you 
for your name.  You are now logged in, but Chat is very boring with only 
one person logged in, so get someone else to log in as well, or log in 
yourself several times.  From now on anything you type will be echoed to 
all other users in a format like this:

I type “Hello”, and others would see:
PeterL: Hello

Here is a sample session:

**** Sample Session ****
unixprompt> telnet mymac 1420
Welcome to Peter's Private Party Line.
Select a channel ("normal" is a good bet):normal
Enter your name:PeterL
Welcome.  Commands start with a  slash (/), everything else goes to the 
channel.
Warning: Everything said is logged and may be used against you.
/LIST
FredB
Hi Fred, whats up?
FredB: Ahh, Peter you showed up.  Nothing much, usual stuff.
FredB: How's Chat coming along?
FredB: How is Chat coming along?
****

Here, I typed the lines:
telnet mymac 1420
normal (third line)
PeterL (fourth line)
Hi Fred, whats up?

Try it out, you’ll get the idea pretty quick.

There are several commands, they all start with a slash (/), to get a 
list, just type "/<return>":

****
/
Bad command.  Commands are:
/QUIT - exit chat, but why would you want to leave?
/LIST - display a list of people on this channel.
/DO <action> - display an action like "Yourname <action>"
/ME <action> - same as /DO
/SET <variable> <value> - set a variable (eg /SET echo true)
everything else is sent to everyone on the channel.
****

There is also a silent command which only the owner should use, QUITNOW 
(case IS relevant), which closes the server down.  Don’t use this on 
someone else’s server!  As the owner, you can change this command by 
changing the Globals STR#, but you probably wont need to, since no one 
reads the documentation anyway, they'll never find out about it :-)

There is no way to change channels once you are on, or to listen in on 
more than one channel at once (except by connecting to the server more 
than once of course).

• Customising Chat

You can customise Chat by using ResEdit to change the STR# resource which 
contains the port number, the channel names, and log names, the Chat Log 
creator, the commands, and all the strings that Chat produces.

• How It Works

Chat is a very simple program, I wrote it in about three hours, plus I've 
done about a dozen more hours neatifying it, and a couple hours getting it 
ready to send out.  The entire program (ignoring the TCP and other 
libraries) is only a couple hundred lines, and as such should be a good 
starting sample code for writing TCP applications (the pascal source code 
will be sent out as with most of my programs).

All it does is listen to the TCP port specified in the STR# resource.  
When it gets a new connection it starts up another listener, and deals 
with the user, first getting their channel and name, and then echoing all 
their messages to the other users on that channel.  It does this by 
keeping a list of all currently logged on users, when a line comes in from 
one user, it goes thru the list and echoes it (with the user’s name 
prepended) to all other users with the same channel.

• Limitations

Chat probably require the 128k ROM and System version 6.0 or higher.  It 
may well only work with a Mac IIsi (not mine)-:, and System 7.0.  It 
definitely requires MacTCP v1.1 or better yet 1.1.1.

There are several caveats.  Second, in a “crowded room”, you may have 
troubles with people all speaking at once (which is not a real problem for 
users using MUDDweller, but mucks up the screens of users who connect with 
other clients).  The solution we adopted was to start and end you messages 
with a blank line, so people can tell when you have finished, and avoid 
interrupting you once you have started.

• Small Print

This program is free, don’t bother sending me any money for this one, it 
was only a days work anyway.  If you like it, send me an Email message 
saying hello, or a postcard or something like that.

You may distribute Chat any way you wish as long as you don't charge for 
it (reasonable download costs such as Compu$erve are ok I guess (although 
who would call Compu$erve's download costs reasonable?)).  It would 
probably be a good idea to keep this documentation file with the program, 
but I'm hardly likely to check up on you now am I!  I don't guarantee any 
support, but I always answer my Email (I'm not so good with snail-mail and 
those horrible little bits of paper and such!).  If I don't answer Email 
its because your message didn't get to me, or my reply bounced (so try 
again, and include a valid Internet address if you can).

You MAY NOT distribute it on any magnetic media you charge for without my 
express permission unless you charge less that US$3 for the disks (and no 
membership costs).  I am sick and tired of seeing people selling 
PD/Shareware software for ten dollars a disk without any reimbursement to 
the authors.  If you are a legitimate user group, let me know and I'll 
waive teh "no membership costs" restriction. 

• Warranty

      There is absolutely NO warranty, guarantee, hint, suggestion or 
anything else that would lead anyone to think that Chat do anything stated 
in this documentation.  It usually does not destroy data (systems, 
hardware, etc), and has sometimes worked on my Mac with System 7.0.  It is 
highly unlikely that it will work with older systems (pre 6.0 anyway) or 
with the 64k ROM.  It might work with the other models, but I don't have 
them all, so I don't know (Anyone want to give me a IIfx (or one of those 
new beasts?  How did they come up with such a terrible name???) so I can 
check for compatibility?).  It might work with future versions of MacTCP 
(after 1.1.1), but who can tell?  If it works on your system (or 
especially if it doesn't!), send me a postcard or some Email and let me 
know!

• Fine Print

      Peter Lewis hereby disclaims all warranties relating to this 
software, whether express or implied, including without limitation any 
implied warranties of merchantability or fitness for a particular 
purpose.  Does any one really read this stuff.  Peter Lewis will not be 
liable for any special, incidental, consequential, indirect or similar 
damages due to loss of data or any other reason, even if Peter Lewis or an 
agent of his has been advised of the possibility of such damages.  In no 
event shall Peter Lewis be liable for any damages, regardless of the form 
of the claim.  The person using the software bears all risk as to the 
quality and performance of the software.

• Version History

Still to do -

Perhaps a password facility.
Private message facility - nope, I've decided not to do this.
Uniteruptable messages
Log play back

v1.1.0
~Multiple channels
~New / command structure

v1.0.1
~Word wrapping lines.

v1.0.0
~Moved strings into resource fork.
~Improved strings

*****
* The Author

Programs written by me:
Anarchie 1.1.0 - Macintosh Archie client and FTP browser.
Morpion 1.0.0 - A simple solitaire game.
FTPd 2.2.0 - Macintosh FTP server.
Daemon 1.0.0 - Macintosh multi-protocol daemon.
Script Daemon 1.0.0 - Telnet->AppleScript gateway
DeHQX 2.0.1 - BinHex decoder (use StuffIt Expander instead).
Finger 1.3.7 - Macintosh Finger client/daemon.
Talk 1.1.1 - Macintosh Talk client/daemon.
MacTCP Watcher 1.1.0 - Display MacTCP state information.
MacBinary II+ 1.0.2 - MacBinary II+ encoder/decoder.
ObiWan 4.0.1 - Online help system.
Bolo Finder 1.0.2 - Display the results from Mike Ellis' Bolo Tracker.
Bolo RandomMap 1.1.0 - Generate a random map for Bolo.
FetchNews 1.0.0b - Fetch News for use with NewsWatcher demo mode.
Chat 1.1.0 - Multiuser primitive irc-like daemon.

The latest versions of my programs are available from:
amug.org:/pub/ftp1/peterlewis
redback.cs.uwa.edu.au:/others/peterlewis
and French versions of some of my programs may be available from:
ftp.sri.ucl.ac.be:/pub.

You can sometimes get the latest development versions from redback, but
only use the development versions if you have some specific problem - in
which case you should tell me, especially since the development versions on
redback are often not the latest versions I have)

Send postcards, comments, bug reports, wishes, and payments to:

Peter Lewis,
10 Earlston Way,
Booragoon, Perth, WA, 6154,
AUSTRALIA

or by electronic mail to:

Internet: peter.lewis@info.curtin.edu.au
Bitnet: peter.lewis%info.curtin.edu.au@cunyvm.bitnet
UUCP: uunet!munnari.oz!info.curtin.edu.au!peter.lewis
*****